# 37. time模块 - 时间模块
# time时间模块
时间分为三种格式
- 时间戳时间格式:又称为格林威治时间,是float数据类型,就是浮点类型,这格式是专门给机器用的
- 时间戳时间格式的计算起步时间:
- 英国伦敦的时间 1970.1.1 0:0:0
- 北京时间 1970.1.1 8:0:0
- 时间是按毫秒进行存储的
- 如果需要得出时间, 程序会先获取时间戳时间格式类型的数据,就是一大串浮点数,在按起步时间进行计算,就可以得出当前的时间,或未来的时间,或过去的时间
- 时间戳时间格式的计算起步时间:
- 结构化时间:时间对象,元组(struct_time)类型
- 时间戳时间格式转换后的数据就是结构化时间
- 能够通过属性名来获取时间对象中的值
- 格式化时间:字符串时间、自定义格式时间,属于str类型的数据,这格式只能给用户看,机器是无法识别的
- 可以根据需要的格式来显示时间
# 时间戳时间格式 - time
这种就为时间戳时间格式的数据时间
import time
print(time.time())
执行结果:
1568966977.5773466
# 结构化时间 - localtime
# 结构化时间元素
结构化时间元素 :元组(struct_time) ,元组共有9个元素共九个元素:(年,月,日,时,分,秒,周,年天数)
索引(Index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2011 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(时) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 60 |
6 | tm_wday(周) | 0 - 6(0表示周一) |
7 | tm_yday(一年中的第几天) | 1 - 366 |
8 | tm_isdst(是否是夏令时) | 默认为 |
# 简单使用
这种就是结构化时间,是先把时间戳时间格式的数据进行计算得出来的
import time
print(time.localtime())
执行结果:
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=20, tm_hour=16, tm_min=11, tm_sec=40, tm_wday=4, tm_yday=263, tm_isdst=0)
## 还可以这样,使用结构化时间元素
import time
print(time.localtime())
print(time.localtime().tm_year)
print(time.localtime().tm_mon)
print(time.localtime().tm_mday)
执行结果:
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=20, tm_hour=16, tm_min=16, tm_sec=22, tm_wday=4, tm_yday=263, tm_isdst=0)
2019
9
20
# 有没有猜到,还可以直接获取time.localtime()结果中的某个对应的值,称为结构化时间元素
# 格式化时间 - strftime
格式化时间是用时间字符串来进行格式化的
# 常用时间字符串
时间字符串 | 用法 |
---|---|
%Y | 四位数的年份 |
%m | 月份(01-12) |
%d | 天分,某个月内中的一天(0-31) |
%H | 24小时制,小时数(0-23) |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00=59) |
%S | 秒(00-59) |
# 时间字符串大全
时间字符串 | 用法 |
---|---|
%Y | 四位数的年份 |
%y | 二位数年份,比如2019显示为19 |
%m | 月份(01-12) |
%d | 天分,某个月内中的一天(0-31) |
%H | 24小时制,小时数(0-23) |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00=59) |
%S | 秒(00-59) |
%A | 本地完整星期名称 |
%a | 本地简化星期名称 |
%B | 本地完整的月份名称 |
%b | 本地简化的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%j | 年内的一天(001-366 |
%p | 本地A.M.或P.M.的等价符 |
%U | 一年中的星期数(00-53)星期天为星期的开始 |
%w | 星期(0-6),星期天为星期的开始 |
%W | 一年中的星期数(00-53)星期一为星期的开始 |
%x | 本地相应的日期表示 |
%X | 本地相应的时间表示 |
%Z | 当前时区的名称 |
%% | %号本身 |
# 简单使用
最最常用的时间格式
import time
print(time.strftime("%Y-%m-%d %H:%M:%S"))
执行结果:
2019-09-20 16:37:52
# ===================================
# 三大格式转换
格式转换是有顺序的,所以这里我分为二部分,顺时针转换,逆时针转换
# 顺时针转换
时间戳时间格式 ==> 结构化时间 ==> 格式化时间
# 时间戳时间格式 转换 结构化时间 -localtime / gmtime
有二个方法
- localtime:转换成北京时间起步
- gmtime:转换成美国伦敦的时间起步
localtime()方法 - 结构化北京时间
localtime方法默认获取当前最新的时间戳时间数据,
也可以指定时间戳时间数据:localtime(时间戳时间数据)
默认的localitime = time.localtime(time.time())
格式:time.localitime (时间戳时间) , 如果时间戳时间参数不写,默认就是最新的时间戳时间
import time
print(time.localtime()) ## 默认获取当前
print(time.localtime(time.time())) ## 指定时间戳,也是指定了最新的时间戳
print(time.localtime(10000000000)) ## 指定时间戳,随便指定的时间戳
执行结果:
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=20, tm_hour=17, tm_min=5, tm_sec=20, tm_wday=4, tm_yday=263, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=20, tm_hour=17, tm_min=5, tm_sec=20, tm_wday=4, tm_yday=263, tm_isdst=0)
time.struct_time(tm_year=2286, tm_mon=11, tm_mday=21, tm_hour=1, tm_min=46, tm_sec=40, tm_wday=6, tm_yday=325, tm_isdst=0)
## 可以对比一下,第一跟第二的结果是不是一样
gmtime()方法 - 结构化美国伦敦时间
gmtime方法默认获取当前最新的时间戳时间数据,
也可以指定时间戳时间数据:gmtime(时间戳时间数据)
默认的gmtime= time.gmtime(time.time())
格式:time.gmtime(时间戳时间) , 如果时间戳时间参数不写,默认就是最新的时间戳时间
import time
print(time.gmtime()) ## 默认获取当前
print(time.gmtime(time.time())) ## 指定时间戳,也是指定了最新的时间戳
print(time.gmtime(10000000000)) ## 指定时间戳,随便指定的时间戳
执行结果:
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=20, tm_hour=9, tm_min=6, tm_sec=41, tm_wday=4, tm_yday=263, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=20, tm_hour=9, tm_min=6, tm_sec=41, tm_wday=4, tm_yday=263, tm_isdst=0)
time.struct_time(tm_year=2286, tm_mon=11, tm_mday=20, tm_hour=17, tm_min=46, tm_sec=40, tm_wday=5, tm_yday=324, tm_isdst=0)
## 可以对比一下,第一跟第二的结果是不是一样
# 结构化时间 转换 格式化时间 - strftime
格式:time.strftime("格式定义","结构化时间") 结构化时间参数若不传,则显示当前时间
import time
## 默认获取当前最新结构化时间进行格式化
print(time.strftime("%Y-%m-%d %H:%M:%S"))
## 指定结构化时间,获取当前最新结构化时间进行格式化
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
## 指定结构化时间,获取指定结构化时间进行格式化
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(10000000000)))
执行结果:
2019-09-20 17:17:00
2019-09-20 17:17:00
2286-11-21 01:46:40
# 逆时针转换
格式化时间 ==> 结构化时间 ==> 时间戳时间格式
# 格式化时间 转换 结构化时间 -strptime
格式:time.strptime(时间字符串,字符串对应格式)
import time
print(time.strptime("2019-09-20","%Y-%m-%d"))
print(time.strptime("2019-09-20 17:20:07","%Y-%m-%d %H:%M:%S"))
print(time.strptime("2286-11-21 01:46:40","%Y-%m-%d %H:%M:%S"))
执行结果:
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=263, tm_isdst=-1)
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=20, tm_hour=17, tm_min=20, tm_sec=7, tm_wday=4, tm_yday=263, tm_isdst=-1)
time.struct_time(tm_year=2286, tm_mon=11, tm_mday=21, tm_hour=1, tm_min=46, tm_sec=40, tm_wday=6, tm_yday=325, tm_isdst=-1)
# 结构化时间 转换 时间戳时间格式 -tuple
格式:time.mktime(结构化时间)
import time
print(time.mktime(time.localtime()))
print(time.mktime(time.localtime(10000000000)))
time_strptime = time.strptime("2019-09-20 17:20:07", "%Y-%m-%d %H:%M:%S")
print(time.mktime(time_strptime))
执行结果:
1568971734.0
10000000000.0
1568971207.0
# ===================================
# 练习题
# 计算本月一号的时间戳时间
复杂点的
## 通过结构化时间
print(time.mktime(time.strptime("%s%s01"% (time.localtime().tm_year,time.localtime().tm_mon),"%Y%m%d")))
执行结果:
1567267200.0
## 通过格式化时间
print(time.mktime(time.strptime(time.strftime("%Y%m01"),"%Y%m%d")))
执行结果:
1567267200.0
简单点的
## 通过结构化时间
time_strptime = time.strptime("%s%s01"% (time.localtime().tm_year,time.localtime().tm_mon),"%Y%m%d")
print(time.mktime(time_strptime))
执行结果:
1567267200.0
## 通过格式化时间
time_strptime = time.strptime(time.strftime("%Y%m01"),"%Y%m%d")
print(time.mktime(time_strptime))
执行结果:
1567267200.0
# 计算二个时间差
计算两个时间之间的格式化时间差
二个时间:
1. 2018-02-01 21:58
2. 2018-10-01 19:27
so1 = time.mktime(time.strptime("2018-02-01 21:58","%Y-%m-%d %H:%M"))
so2 = time.mktime(time.strptime("2018-10-01 19:27","%Y-%m-%d %H:%M"))
so = so2 - so1
print(so)
print(time.strftime("%m-%d %H:%M",time.localtime(so)))
执行结果:
08-31 05:29